const jwt = require("jsonwebtoken")
//用于校验token是否有效

//核心目的 除了登入和注册以外 其它所有的接口都需要通过当前这个中间价来进行拦截,并且验证token是否有效


//中间件:

//express里面的中间件=>中间件就是一个函数

/**
 * 
 * @param {Object} req 客户端的请求对象
 * @param {Object} res 服务端的响应对象
 * @param {Function} next 调用这个方法,可以将控制权释放给下一个中间件,后续的中间件函数才会执行
 */

const authToken = (req,res,next)=> {
    //除了注册和登入,其它接口一律要进行校验

    //获取用户请求的接口地址  接口=>就是path部分

    console.log(req.path); //可以获取客户端请求的接口(路径)
    //定义一个数组,里面储存着不需要进行token校验的路径

    let passPaths = ["/users/regist","/users/login"];

    //includes 方法 通过passPaths来判断是否包含req.path,如果包含说明不需要远征,直接放行,不然的话就要进行校验

   let isPass = passPaths.includes(req.path);
   if(isPass){
       next()
   }else {
       //进行校验
       //获取前端传过来要验证的token
       //从headers中获取=>从headers中Authorization这个字段中获取
       console.log(req.headers);
       let token = req.headers.authorization;
       let secret = "MY_NAME_IS_XIANG"
       jwt.verify(token,secret,(err,decoded)=>{
        if(err){
            res.send({state:false,status:4003,msg:"token失效"})
        }else {
            //验证通过
            // 放行
            next()
        }
       })
   }

}

module.exports = authToken;